package mio.services;

import java.awt.geom.Point2D;
import java.util.ArrayList;
import java.util.Hashtable;

import sun.security.action.GetLongAction;
import mio.model.Line;
import mio.model.MobileUnit;
import mio.model.Stop;
import mio.util.MIORepository;

public class MobileUnitServices {
	
	private final static IMIORepository repo = new MIORepository();
	private final int PESO_PERSONA = 60; // kilos?
	
	
	public static ArrayList<Long> getTiempoUnidadUnidadMovilAUbicacion(Line linea, Stop posicion){				
		return null;				
	}
	
	private int getVelocidadPromedio( long idUnidad, Line linea){		
		/**KMS?*/
		ArrayList<MobileUnit> unidades = repo.getMobileUnits();
		repo.getLines().get(linea.getId());
		return 50; // TODO: calcular velocidad		
	}	
	
	/********************************************************************/
		
	public static ArrayList<Long> getDistanciaUnidadMovilAUbicacion(Line linea, Stop posicion){
		Stop destino = repo.getStops().get(posicion.getId());
		/*capturar buses de la linea, verificar distancia entre ellos y la parada ordenar y retornar 3 tiempos*/
		ArrayList<Long> tiempos =  new ArrayList<Long>();
		tiempos.add(3L);
		tiempos.add(8L);
		tiempos.add(14L);
		return tiempos;				
	}

	/********************************************************************/
	
	public static ArrayList<Double> getOcupacionUnidadMovil(Line linea, Stop posicion){		
		Stop destino = repo.getStops().get(posicion.getId());
		/* capturar buses de la linea, verificar distancia entre ellos y la parada ordenar y retornar 3 valores de porcentaje de ocupacion basandose en 
		 * peso actual, peso vacio, peso persona y capacidad maxima de la unidad */
		ArrayList<Double> ocupaciones =  new ArrayList<Double>();
		ocupaciones.add(0.75);
		ocupaciones.add(0.80);
		ocupaciones.add(0.40);		
		return ocupaciones;				
	}
	
	private int getPesoVacioUnidadMovil( MobileUnit unidad ){
		return repo.getMobileUnits().get(unidad.getId()).getEmptyWeight();		
	}
	
	private int getPesoActualUnidadMovil( MobileUnit unidad){
		return repo.getMobileUnits().get(unidad.getId()).getWeight();	
	}
	
	private int getPesoPromedioPersona(){
		return PESO_PERSONA;		
	}
	
	private int getCapacidadUnidadMovill( MobileUnit unidad ){
		return repo.getMobileUnits().get(unidad.getId()).getCapacity();			
	}
	
	/********************************************************************/
	
	private ArrayList<MobileUnit> getProximasUnidades(){
		System.out.println("esta funcion no ha sido implementada getProximasUniades()");
		return null;				
	}
	
	private double getDistanciaEntre(Stop puntoA, Stop puntoB){		
		return Point2D.distance(puntoA.getDecimalLatitude(), puntoA.getDecimalLongitude(), puntoA.getDecimalLatitude(), puntoA.getDecimalLongitude());
	}
	
}
